import request from '@/utils/request'

// 查询任务安排列表
export function listArrangement(query) {
  return request({
    url: '/serve/arrangement/list',
    method: 'get',
    params: query
  })
}

// 查询任务安排详细
export function getArrangement(id) {
  return request({
    url: '/serve/arrangement/' + id,
    method: 'get'
  })
}

// 新增任务安排
export function addArrangement(data) {
  return request({
    url: '/serve/arrangement',
    method: 'post',
    data: data
  })
}

// 修改任务安排（通用更新，保留）
export function updateArrangement(data) {
  return request({
    url: '/serve/arrangement',
    method: 'put',
    data: data
  })
}

// 删除任务安排
export function delArrangement(id) {
  return request({
    url: '/serve/arrangement/' + id,
    method: 'delete'
  })
}

// 取消任务（需传递取消原因）
/**
 * 取消任务
 * @param {Number} id - 任务ID
 * @param {String} cancelReason - 取消原因（必填）
 * @returns {Promise} 请求结果
 */
export function cancelTask(id, cancelReason) {
  return request({
    url: `/serve/arrangement/cancel/${id}`,
    method: 'put',
    data: cancelReason // 后端接收取消原因字符串
  })
}

// 执行任务（需传递执行时间、记录、图片等）
/**
 * 执行任务
 * @param {Number} id - 任务ID
 * @param {Object} executionData - 执行数据
 * @param {String} executionData.executionTime - 执行时间（格式：yyyy-MM-dd HH:mm:ss）
 * @param {String} executionData.executionImage - 执行图片路径（可选，多个用逗号分隔）
 * @param {String} executionData.executionRecord - 执行记录（必填）
 * @returns {Promise} 请求结果
 */
export function executeTask(id, executionData) {
  return request({
    url: `/serve/arrangement/execute/${id}`, // 路径参数携带任务ID
    method: 'put',
    data: executionData // 传递执行详情对象
  })
}

// 任务改期（需传递新时间和改期原因）
/**
 * 任务改期
 * @param {Number} id - 任务ID
 * @param {Object} rescheduleData - 改期数据
 * @param {String} rescheduleData.newExpectedTime - 新的期望服务时间（格式：yyyy-MM-dd HH:mm:ss，必填）
 * @param {String} rescheduleData.reason - 改期原因（必填）
 * @returns {Promise} 请求结果
 */
export function rescheduleTask(id, rescheduleData) {
  return request({
    url: `/serve/arrangement/reschedule/${id}`, // 路径参数携带任务ID
    method: 'put',
    data: rescheduleData // 传递改期详情对象
  })
}